我的 MacBook Air 是 mid2012 的，这时的 MBA 已经是基于 UEFI，而非 BIOS 的了。我的目标是安装 MacOS 和 arch linux dual boot 的系统。

<h2>1. MacOS 中的操作</h2>
<ol>
<li>
Resize MacOS partition using Disk utility.

要留多一点，disk utility 显示我有 50G free space，其实 mac 在后面又偷偷用了一些，在装 Linux 时我发现少了近3G
</li>

<li>
Make a usb installer for arch linux.

<pre>
diskutil unmountDisk /dev/diskN
sudo dd if=/path/to/linux.iso of=/dev/diskN bs=1m
</pre>

/dev/diskN 是 usb。
</li>

<li>
Install rEFIt on mac.

需要重启mac两次才能生效，真是奇葩阿
</li>

<li>
插上你的 usb，你会在重启之后看到 rEFIt 的菜单中多出很多 usb 里包含的启动项
</li>
</ol>

<h2>2. Install Arch Linux</h2>

<ol>
<li>
boot from USB

从 rEFIt 启动项中选 boot from EFI/boot/bootx64.efi，不要选 boot from EFI/archiso/vmlinuz.efi，选这个会有 kernel panic，启动不了。
</li>

<li>
Disk partition

之前看到说 linux 的 udev 是异步的，今天就遇到这个异步带来的困扰，我准备 format mac 的磁盘时，发现我 mac 的磁盘居然是 /dev/sdb，(sda 是我的u盘)。开始还以为怎么了，后来想到可能因为 udev 是异步的原因，果然重启之后，磁盘又变成 /dev/sda 了。

<pre>gdisk /dev/sda
</pre>

  <ol>
  <li>不要 swap，大不了以后用 swapfile，对于有 4G 内存的机子，swap 不是太需要了</li>
  <li>只创建了两个用于 / 和 /home 的分区，/boot/ 我直接 mount 在 EFI partition</li>
  <li>在 mac os 的 recovery HD 后面留出了 128M 的 free space，据说不这么做 osx 可能会不爽</li>
  </ol></br>

另外，比较诡异的是，我gdisk 完事，都已经w了，可是退出 gdisk 后，在 /dev/ 目录下没有 sda4 和 sda5，可是不管用 gdisk 还是 cgdisk 都显示有，然后我就重启了，重启完好使了。
</li>
   
<li>
make filesystem

<pre>
mkfs.ext4 /dev/sda4
mkfs.ext4 /dev/sda5
</pre>

关于每个 partition 的情况你随时都可以 lsblk /dev/sda 看看
</li>

<li>
mount partitions

<pre>
mount /dev/sda4 /mnt
mkdir /mnt/{boot，home}
mount /dev/sda1 /mnt/boot
mount /dev/sda5 /mnt/home
</pre>

我直接将 /boot mount 在已有的 EFI partition 上。
</li>

<li>
setup wireless

<ol>
<li>
确认无线硬件已被识别，运行

<pre>iw dev</pre>
</li>

<li>
得到 AP(access point) 列表

<pre>iw dev wlp2s0 scan | less</pre>

注意如果你是在一台同时有有线和无线的机子上，默认是开启有线的接口，这种情况下，你要先运行 <b>iw dev set wlp2s0 up</b> 来开启无线接口，然后才能运行 scan，否则会提示 network is down。

可以参考 <a href="https://wiki.archlinux.org/index.php/Wireless_Setup">arch wiki</a> 确定每个字段都是什么意思。
</li>

<li>
生成无线配置文件

从显示的信息看无线是 WPA/WPA2 加密的。

我家的网络提示的 Authentication suites 是 PSK，而我公司的提示 802.1x，也就是说我公司的网络需要输入用户名密码才行。

对于 PSK 的网络直接用 wpa_passphrase 生成 conf 即可，如下
<pre>
wpa_passphrase [SSID] [PASSWORD] > /etc/wpa_supplicant/[SSID].conf
</pre>

对于 802.1x 的网络，你还得知道他的 key management 方法和 encapsulation 方法，我公司用的常用的 WPA-EAP 做 key management， PEAP 做 encapsulation，所以 conf 如下。

<pre>
network={
        ssid="alibaba-inc"
        key_mgmt=WPA-EAP
        eap=PEAP
        identity="..."
        password="..."
}
</pre>
</li>

<li>
连接无线网

<pre>
wpa_supplicant -B -i wlp2s0 -c /etc/wpa_supplicant/[SSID].conf
</pre>
</li>

<li>
确认 wireless is connected，运行

<pre>
iw dev wlp2s0 link 
</pre>
</li>

<li>
获取 ip 地址，运行

<pre>
dhcpcd wlp2s0
</pre>
</li>

<li>
确认一切ok

<pre>
ping sina.com
</pre>
</li>

</ol>

</li>

<li>
选取最快的 repository

<pre>
vi /etc/pacman.d/mirrorlist 
</pre>
</li>

<li>
安装基本包

<pre>
pacstrap /mnt base base-devel
</pre>
</li>

<li>
各种配置

<pre>
genfstab -p /mnt >> /mnt/etc/fstab
arch-chroot /mnt /bin/bash
echo juscodit > /etc/hostname
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
useradd -m -g users -s /bin/bash juscodit
passwd
passwd juscodit
vi /etc/locale.gen
locale-gen
pacman -S sudo
visudo # add "juscodit ALL=(ALL) NOPASSWD: ALL
pacman -S wpa_supplicant iw
</pre>
</li>

<li>
安装 grub

我曾尝试用 efi_stub 直接启动 kernel，不额外安装 boot loader，结果失败了，提示一个 firmware bug 然后一个 kernel panic，然后就没有然后了。这个我上面 usb boot 的时候遇到过，后来我尝试了用 usb 中 bootx64.efi 启动，发现可以，这个的意思就是你没法用 efi_stub 来直接 boot 你的系统，需要依赖一个 boot loader 来载入 kernel。

运行下面的命令安装 grub

<pre>
pacman -S grub-efi-x86_64 dosfstools efibootmgr
grub-install --target=x86_64-efi --efi-directory=$esp --bootloader-id=grub --recheck --debug
grub-mkconfig -o /boot/grub/grub.cfg
</pre>
</li>

<li>
完事重启

<pre>
exit
umount -R /mnt/
reboot
</pre>
</li>
</ol>

<h2>3. Post Install</h2>

<ol>
<li>
安装显卡驱动

运行下面命令查看显卡信息

<pre>lspci | grep VGA</pre>

MBA 是 intel 的显卡，安装 <b>xf86-video-intel</b>
</li>

<li>
声音

install alsa-utils, run alsamixer and press 'm' to unmute master and up/down arrow to increase/decrease the volume
</li>

<li>
touchpad

install xf86-input-synaptics to enable touchpad. (mouse pointer is much more stable with xf86-input-synaptics than xf86-input-mtrack-git)
</li>
</ol>

